﻿using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid;
using LayerEntity.Producto;
using LayerLogic;

namespace System2012.Almacen
{
    public partial class frmUnidades : DevExpress.XtraEditors.XtraForm
    { /// <summary>
        /// intProcesoActivo proceso que se esta ejecuntado dentro del Hilo de backgroud
        /// </summary>
        int intProcesoActivo = 0;
        /// <summary>
        /// Indica si estamos editanado o creando uno Nuevo
        /// 0: Nuevo Documento
        /// 1: Editando y Guardando
        /// </summary>
        ///  /// <summary>
        /// metodos y funciones globales de ayuda del sistema
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        GUtil util = new GUtil();
        int operacion = 0;
        /// <summary>
        /// 
        /// </summary>
        DataTable dtbUnimed;
        public frmUnidades()
        {
            this.InitializeComponent();
        }

        private void NuevaUnidad()
        {
            this.util.RecControles(this);

            this.operacion = 0;
            this.txtId.Text = "0";
        }

        private void Grabar()
        {
            EUnimed ObjU = new EUnimed();
            ObjU.id_unidad = int.Parse(this.txtId.Text);
            ObjU.des_unidad = this.txtNombre.Text;
            ObjU.abreviatura = this.txtAbreviatura.Text;
            ObjU.venta_con_fraccion = this.chkFraccion.Checked;
            ObjU.val_venta = decimal.Parse(this.txtValUnidad.Text);
            ObjU.val_minimo = decimal.Parse(this.txtValMinimo.Text);
            ObjU.id_estado = int.Parse(this.CbListEstado.EditValue.ToString());
            string resultado = System2012.SystemUtils.RecodManajerproducto.MantenimientoUnidades(ObjU, this.operacion == 0 ? EnumOperaciones.Insertar : EnumOperaciones.Actualizar);
            if (resultado == "0")
            {
                XtraMessageBox.Show(this, "PROCESO EFECTUADO CON EXITO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.None);
            }
            else
            {
                if (resultado == "-1")
                {
                    XtraMessageBox.Show(this, "INCONSISTENCIA INESPERADA \n NO SE REALIZO NINGUNA OPERACIÓN", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (resultado == "-2")
                    {
                        XtraMessageBox.Show(this, "EL NOMBRE DEL LA UNIDAD INGRESADO YA EXISTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if (resultado == "-2")
                        {
                            XtraMessageBox.Show(this, "INCONSISTENCIA INESPERADA \n NO SE REALIZO NINGUNA CTUALIZACION", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                        {
                            if (resultado == "-4")
                            {
                                XtraMessageBox.Show(this, "NO HA SELECCIONADO NINGUN REGISTRO\n PARA REALIAR ESTE\n PROCESO INTENTE NUEVAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    }
                }
            }
            if (!this.BGWUnidades.IsBusy)
            {
                this.BGWUnidades.RunWorkerAsync();
            }
        }

        private void Editar(int index)
        {
            this.txtId.Text = this.dtbUnimed.Rows[index]["id_unidad"].ToString();
            this.txtNombre.Text = this.dtbUnimed.Rows[index]["unidad"].ToString();
            this.txtAbreviatura.Text = this.dtbUnimed.Rows[index]["abreviatura"].ToString();
            this.chkFraccion.Checked = bool.Parse(this.dtbUnimed.Rows[index]["fraccion"].ToString());
            this.txtValUnidad.Text = this.dtbUnimed.Rows[index]["val_venta"].ToString();
            this.txtValMinimo.Text = this.dtbUnimed.Rows[index]["val_minimo"].ToString();
            this.CbListEstado.EditValue = int.Parse(this.dtbUnimed.Rows[index]["id_estado"].ToString());
            this.operacion = 1;
        }

        private bool Validar()
        {
            bool res = false;
            if (this.txtNombre.Text.Trim() == string.Empty)
            {
                res = false;
                XtraMessageBox.Show(this, "DEBE DE INGRESAR EL NOMBRE DE LA UNIDAD", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if (this.txtAbreviatura.Text == string.Empty)
                {
                    res = false;
                    XtraMessageBox.Show(this, "INGRESE LA ABREVIATURA", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (this.txtValUnidad.Text == string.Empty)
                    {
                        res = false;
                        XtraMessageBox.Show(this, "INGRESE EL VALOR DE VENTA UNIDAD", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if (this.txtValMinimo.Text == string.Empty)
                        {
                            res = false;
                            XtraMessageBox.Show(this, "INGRESE EL VALOR MINIMO DE VENTA", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                        {
                            if (this.CbListEstado.ItemIndex == -1)
                            {
                                res = false;
                                XtraMessageBox.Show(this, "SELECCIONE EL ESTADO DE LA UNIDAD", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            else
                            {
                                res = true;
                            }
                        }
                    }
                }
            }
            return res;
        }

        private void BGWEstados_DoWork(object sender, DoWorkEventArgs e)
        {
            this.BGWEstados.ReportProgress(30, "Cargando Estado");
            e.Result = SystemUtils.RecordManagerCommonList.GetEstados();
            this.BGWEstados.ReportProgress(100, "Completado");
        }

        private void BGWEstados_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.CbListEstado.Properties.DataSource = e.Result;
            if (!this.BGWUnidades.IsBusy)
            {
                this.BGWUnidades.RunWorkerAsync();
            }
        }

        private void frmUnidades_Load(object sender, EventArgs e)
        {
            if (!this.BGWEstados.IsBusy)
            {
                this.BGWEstados.RunWorkerAsync();
            }
        }

        private void barManager1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if ((string)e.Item.Tag == "Nuevo")
            {
                this.NuevaUnidad();
            }
            if ((string)e.Item.Tag == "Grabar")
            {
                if (this.Validar())
                {
                    this.Grabar();
                }
            }
        }

        private void BGWUnidades_DoWork(object sender, DoWorkEventArgs e)
        {
            this.BGWUnidades.ReportProgress(30, "Cargando Unidades");
            EUnimed obj = new EUnimed();
            obj.des_unidad = this.txtFiltroUnimed.Text;
            e.Result = SystemUtils.RecodManajerproducto.GetListaUnidad(obj);
            this.BGWUnidades.ReportProgress(100, "Completado");
        }

        private void BGWUnidades_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.dtbUnimed = new DataTable();
            this.dtbUnimed = (DataTable)e.Result;
            this.gridControl1.DataSource = this.dtbUnimed;// System2012.SystemUtils.MantenanceHabitacion.getHabitaciones();
            this.gridControl1.RefreshDataSource();
        }

        private void txtFiltroUnimed_TextChanged(object sender, EventArgs e)
        {
            if (!this.BGWUnidades.IsBusy)
            {
                this.BGWUnidades.RunWorkerAsync();
            }
        }

        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            if (e.RowHandle > 0)
            {
                this.Editar(e.RowHandle);
            }
        }

        private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            if (e.RowHandle >= 0)
            {
                GridView view = sender as GridView;
                if (view.GetRowCellValue(e.RowHandle, view.Columns["estado"]).ToString() == "ELIMINADO")
                {
                    e.Appearance.BackColor = Color.Red;
                    e.Appearance.ForeColor = Color.Snow;
                }
                else
                {
                    if (view.GetRowCellValue(e.RowHandle, view.Columns["estado"]).ToString() == "INACTIVO")
                    {
                        e.Appearance.BackColor = Color.FromArgb(0xFF, 0xFF, 0x99);
                        e.Appearance.ForeColor = Color.Black;
                    }
                }
            }
        }
    }
}